import random # 随机的模块，用来生产随机数
"""
总结：
1、列表是可变的，可以增删改
2、列表支持索引、支持切片，列表是有序的
"""


# 列表的创建
"""
a = [10,20,'wcs','19']
b = [] # 创建了一个空的列表
print(b)
print(a)
"""
# list() 创建
"""
str1 = "王长帅"
print(list(str1)) # 把字符串转换成列表

c = list(range(10))
print(c)
"""
# 列表推导式
"""
nums = [i for i in range(10)]
print(nums)
# 等同于下面的
nums = []
for i in range(10):
    nums.append(i) # 在列表末尾追加一个元素
print(nums)
"""
"""
nums = [i for i in range(10) if i%2]
print(nums)
# 等同于下面的
x = []
for i in range(10):
    if i%2:
        x.append(i)
print(x)
"""
"""
nums = [(x,y) for x in range(5,10) for y in range(10,20)]
print(nums)

nums1 = []
for x in range(5,10):
    for y in range(10,20):
        nums1.append((x,y))
print(nums1)
"""
"""
ts_file = ['11.ts','2.ts','4.ts','3.ts','5.ts']
# 1. 变成字符串的数字
s1 = [i.replace('.ts','') for i in ts_file]
print(s1)
# 2. 变成整数
s2 = [int(i.replace('.ts','')) for i in ts_file]
print(s2)
# 3. 对生产整数的列表进行排序
s3 = sorted([int(i.replace('.ts','')) for i in ts_file])
print(s3)
#4.　又变回字符串类型的数字并加上．ts
s4 = [str(j) + '.ts' for j in s3]
print(s4)
"""
# 使用下标获取列表元素

#a=[10,20,30,40,50,20,30,20,30]
"""
print(a[3])
#print(a[20]) # IndexError: list index out of range
"""
# 列表内置方法
"""
a=[10,20,30,40,50,20,30,20,30]
a.append("王长帅") # 列表末尾追加一个元素
print(a)

print(a.index(20,3)) # 搜索20的值，从索引第三个往后的第一个20
print(a.index(30,5,7)) # 搜索30的值，从索引第五个开始到第七个结束

a = [10,20]
b = [10,30]
# print(a+b) # [10,20,10,30]
# print(id(a)) # 15747632 19221040
# print(id(b)) # 15746472 19219880

a.extend(b) # 合并列表，将b列表加入到a列表的末尾，改变了a列表
# c = a.extend(b) # extend方法的返回值是none
result = a.insert(0,"wcs")
print(result) # 返回值none
print(a) # ["wcs",10, 20, 10, 30]

result1 = a.remove("wcs") # 删除列表中的具体值
print(result1) # 返回值是none
print(a)

result2 = a.pop(3) # 根据索引删除对应的值
print(result2) # pop的删除方法，返回了具体删除的值
print(a)

b = [30,20,10]
b.reverse()
print(b) # [10, 20, 30]

b = b*3
print(b) # [10, 20, 30,10, 20, 30,10, 20, 30]

del b[0] # 删除b列表索引为0的位置
print(b) # [20, 30, 10, 20, 30, 10, 20, 30]

b.clear() # 清空列表
print(b) # []

c = [10,20]
c[0] = "王长帅"
c[1] = "防御"
print(c) # 改变原来的列表

d = [10,10,10,20,100]
print(d.count(10)) # 统计10出现的次数

if 20 in d:
    print("20在这个列表里")

print(max(d)) # 返回最大值100
print(min(d)) # 返回最小值 10
print(sum(d)) # 求和：150
"""
# 列表的遍历
killers = ['李白','兰陵王','韩信','赵云','阿珂','孙悟空']
# print(len(killers)) # 6
"""

for killer in killers:
    print(killer,end=" ")
print()
"""
"""
for j in range(len(killers)): # 根据列表的长度去遍历  len(killers) 6  循环的次数，6次，从0开始 ，到5结束
    # 0
    #1
    #2
    #3
    #4
    #5
    #？ 因为6-1 5 循环变量最多到5
    print(killers[j],end = " ")
    # killers[0] "李白"
    # killers[1] "兰陵王"
    #..\
    #..\
    #..\
    #..\
print()
"""

# 等同于下面的循环
"""
i = 0 # 循环变量
while i < len(killers):
    print(killers[i],end = " ") # i是索引，从0开始
    i = i+1 # 每次+1
"""

# 列表的排序和反序
"""
a=[20,10,30,40]
a.sort()
print(a) # [10, 20, 30, 40]

a.sort(reverse=True) # reverse，为True的时候，列表降序
print(a) # [40, 30, 20, 10]

a.sort() # 如果reverse为False的话，没必要写了，默认就是升序
print(a) # [10, 20, 30, 40]

b = [20,10,30,40]
c = reversed(b) # 返回迭代器
print(c) # <list_reverseiterator object at 0x0200F4D0>
print(list(c)) # [40, 30, 10, 20]
"""
# 列表的浅拷贝
# 浅拷贝
"""
x = [100,200,300]
y = x
b = x.copy() # copy出来一个x的对象，重新赋值给了b
print(b) # [100,200,300]
x[0] = 1
print(y)
# print(b) #

import copy # import是导入模块的方法，copy是一个库
a = copy.copy(x)  # copy.copy是copy的内置方法
print(a)  # [1, 200, 300]

names1 = ["张三","李四","王五","杰克"]
names2 = names1[::] # ["张三","李四","王五","杰克"]
names1[0] = 'jerry' #
print(names2) # ['张三', '李四', '王五', '杰克']
"""
# 列表的案例
# 1.有一个员工列表 names = ['张三,'李四','王二麻子','周周'] 输入一个员工的名字
# 如果员工存在那么不添加 如果员工不存在则添加员工
# names = ['张三','李四','王二麻子','周周']
"""
name = input("请输入员工名字")
if name in names:
    print("您输入的员工名字已经存在了")
else:
    names.append(name)
    print("添加%s员工成功！"%name)
"""
# 2. 基于需求1.0，我想要不断的添加员工姓名，如果我输出了quit的话，那么结束添加
# 解题思路：
# <1> 因为涉及到了不断添加，所以，我需要用到循环。并且不知道用户到底添加多少个，for or while？ 肯定是while True，来个死循环被
# <2> 输出了quit，退出循环？怎么做？ if判断+break跳出循环
"""
result = input("请输入yes/no")

if result == "yes":
    while True:
        name = input("请输入员工名字")
        if name == "quit":
            print("结束员工添加")
            break
        if name in names:
            print("您输入的员工名字已经存在了")
        else:
            names.append(name)
            print("添加%s员工成功！" % name)
            print(names)
elif result == 'no':
    print("不循环了")
"""
# 多维列表案例
# 一个学校,有三个办公室,现在有10位老师等待工位的分配,请编写程序,完成随机的分配
teachers = ['A','B','C','D','E','F','G','H','I','J']
rooms = [[],[],[]]

for teacher in teachers:
    room = random.choice(rooms) # 随机选择二维列表的其中一个
    room.append(teacher) # 随机放入room里一位老师
# print(rooms)

for i,room in enumerate(rooms):
    print(f"第{i+1}间房子有{room}等老师")
    print(f"第{i+1}间房子有{len(room)}位老师")

# for k,j in enumerate("王长帅"):
#     # (0, '王')
#     # (1, '长')
#     # (2, '帅')
#     print(k,j)




"""
random_num = random.randint(10,30) # 从10~30之间随机返回一个数字
print(random_num) # 打印随机数

ran = random.choice([10,20,30]) # 输入一个序列，返回序列里的随机一个数
print(ran)
"""






















